import argparse
import re

# 统计字符数
def chars_count(text):
    return len(text)

# 统计单词数
def words_count(text):
    words = re.findall(r'\b\w+\b', text)  # 使用正则表达式提取单词
    return len(words)

# 统计句数
def lines_count(text):
    lines = re.split(r'[\.\?\!]\s', text)  # 使用正则表达式提取句子
    return len(lines)

def main():
    # 命令行帮助描述
    parser = argparse.ArgumentParser(description='命令行文本计数统计程序')
    parser.add_argument('file_path', help='File path')
    parser.add_argument('-c', action='store_true', help='Count characters')
    parser.add_argument('-w', action='store_true', help='Count words')
    parser.add_argument('-l', action='store_true', help='Count lines')
    
    args = parser.parse_args()

       # 读取文件内容
    try:
        with open(args.file_path, 'r', encoding='utf-8') as file:
            text = file.read()
       # 这里捕获所有的异常，并将异常对象赋值给变量 error，这样可以获取具体的错误信息。    
    except Exception as error:
        print(f"无法打开文件 {args.file_path}，错误信息: {error}")
        return


    # 命令行结果输出
    if args.c:      # -c 字符数
        print(f"William Blake诗歌中的字符数: {chars_count(text)}")
    
    if args.w:      # -w 单词数
        print(f"William Blake诗歌中的单词数: {words_count(text)}")
    
    if args.l:      # -l 句子数
        print(f"William Blake诗歌中的句子数: {lines_count(text)}")

if __name__ == '__main__':
    main()